# A.5.3 节代码：data_stream_processor.py
import base64
import json
import os
import uuid

# 模拟一个 Base64 编码的音频数据 (正确的和错误的)
CORRECT_B64_AUDIO = base64.b64encode(b"SIMULATED AUDIO DATA").decode('utf-8')
INVALID_B64_AUDIO = CORRECT_B64_AUDIO + "!"  # 包含非法字符 '!'

# 模拟一个 API 接收到的 JSON 消息
MOCK_API_MESSAGE = {
	"user_id": str(uuid.uuid4()),
	"audio_data_base64": CORRECT_B64_AUDIO,
}


def process_audio_data(message: dict):
	"""
	处理 API 接收到的 JSON 消息，并安全地解码 Base64 音频。
	"""
	user_id = message.get("user_id", "Unknown")
	b64_data = message.get("audio_data_base64", "")
	print(f"\n--- 正在处理用户: {user_id[:8]}... 的数据 ---")
	try:
		# 1. Base64 解码 (将 str 转换为 bytes)
		# 这是一个可能引发错误的步骤 (如果 Base64 字符串无效)
		audio_bytes = base64.b64decode(b64_data.encode('utf-8'))
		# 2. 模拟将音频数据写入文件 (使用 with 语句确保文件自动关闭)
		file_name = f"temp_audio_{user_id}.bin"
		with open(file_name, "wb") as f:
			f.write(audio_bytes)
		print(f"\n成功解码并写入 {len(audio_bytes)} 字节的音频数据到 {file_name}。")
		os.remove(file_name)  # 清理临时文件
	except base64.binascii.Error as e:
		# 捕获 Base64 解码错误
		print(f"\n错误：Base64 解码失败。错误信息: {e}")
	except Exception as e:
		# 捕获其他所有错误
		print(f"\n致命错误：处理过程中发生未知错误: {e}")
	finally:
		# 无论是否发生错误，finally 块中的代码都会执行
		print("--- 数据处理流程结束 ---")


# --- 主程序执行部分 ---
if __name__ == "__main__":
	# 案例 1: 成功处理
	process_audio_data(MOCK_API_MESSAGE)
	# 案例 2: 模拟 Base64 错误
	error_message = MOCK_API_MESSAGE.copy()
	error_message["audio_data_base64"] = INVALID_B64_AUDIO
	error_message["user_id"] = str(uuid.uuid4())
	process_audio_data(error_message)